// 全局变量
var currentPage = 1;
var pageSize = 10;
var isLoading = false; // 防止重复请求

// 页面加载完成后初始化
$(function() {
    // 加载用户列表
    loadUserList();

    // 绑定查询按钮事件
    $("#searchBtn").click(function() {
        currentPage = 1; // 重置为第一页
        loadUserList();
    });

    // 绑定回车键搜索（输入框按回车触发查询）
    $("#searchForm input, #searchForm select").keypress(function(e) {
        if (e.which === 13) { // 回车键ASCII码
            e.preventDefault(); // 阻止表单默认提交
            currentPage = 1;
            loadUserList();
        }
    });
});

// 加载用户列表（带加载状态和错误处理）
function loadUserList() {
    if (isLoading) return; // 正在加载时阻止重复请求
    isLoading = true;

    // 显示加载中提示
    showLoading();

    var params = {
        loginname: $("input[name='loginname']").val().trim(),
        email: $("input[name='email']").val().trim(),
        status: $("select[name='status']").val(),
        pageNum: currentPage,
        pageSize: pageSize
    };

    // 发送GET请求
    $.get("${pageContext.request.contextPath}/user/listData", params)
        .done(function(result) {
            // 渲染表格和分页
            renderUserTable(result.data);
            renderPagination(result.total, result.pageNum, result.pages);
        })
        .fail(function(xhr, status, error) {
            // 错误处理
            $("#userTableBody").html('<tr><td colspan="7" class="text-center text-danger">加载失败：' + error + '</td></tr>');
            $("#pagination").empty(); // 清空分页
        })
        .always(function() {
            // 无论成功失败，都关闭加载状态
            hideLoading();
            isLoading = false;
        });
}

// 渲染用户表格
function renderUserTable(users) {
    var tbody = $("#userTableBody");
    tbody.empty();

    if (users && users.length > 0) {
        $.each(users, function(index, user) {
            // 处理角色名称（避免最后一个逗号）
            var roleNames = user.roles && user.roles.length > 0
                ? user.roles.map(role => role.name).join(', ')
                : '无角色';

            // 处理状态显示（添加样式）
            var statusText = user.status === 0
                ? '<span style="color: #2ecc71;">正常</span>'
                : '<span style="color: #e74c3c;">禁用</span>';

            // 构建行HTML
            var row = '<tr>' +
                '<td>' + (user.id || '') + '</td>' +
                '<td>' + (user.loginname || '') + '</td>' +
                '<td>' + (user.name || '') + '</td>' +
                '<td>' + (user.email || '') + '</td>' +
                '<td>' + statusText + '</td>' +
                '<td>' + roleNames + '</td>' +
                '<td>' +
                '<a href="${pageContext.request.contextPath}/user/roles?userId=' + user.id + '" class="btn btn-sm btn-primary">设置角色</a>' +
                '</td>' +
                '</tr>';
            tbody.append(row);
        });
    } else {
        tbody.append('<tr><td colspan="7" class="text-center">暂无匹配数据</td></tr>');
    }
}

// 渲染分页控件（优化页码显示，避免过多页码）
function renderPagination(total, pageNum, pages) {
    var pagination = $("#pagination");
    pagination.empty();

    // 上一页
    pagination.append('<li class="page-item ' + (pageNum === 1 ? 'disabled' : '') + '">' +
        '<a class="page-link" href="javascript:goPage(' + (pageNum - 1) + ')">上一页</a></li>');

    // 页码显示逻辑：最多显示5个页码（当前页前后各2个）
    var startPage = Math.max(1, pageNum - 2);
    var endPage = Math.min(pages, startPage + 4);

    // 如果前面有省略的页码，显示第一页
    if (startPage > 1) {
        pagination.append('<li class="page-item"><a class="page-link" href="javascript:goPage(1)">1</a></li>');
        if (startPage > 2) {
            pagination.append('<li class="page-item disabled"><span class="page-link">...</span></li>');
        }
    }

    // 显示中间页码
    for (var i = startPage; i <= endPage; i++) {
        pagination.append('<li class="page-item ' + (pageNum === i ? 'active' : '') + '">' +
            '<a class="page-link" href="javascript:goPage(' + i + ')">' + i + '</a></li>');
    }

    // 如果后面有省略的页码，显示最后一页
    if (endPage < pages) {
        if (endPage < pages - 1) {
            pagination.append('<li class="page-item disabled"><span class="page-link">...</span></li>');
        }
        pagination.append('<li class="page-item"><a class="page-link" href="javascript:goPage(' + pages + ')">' + pages + '</a></li>');
    }

    // 下一页
    pagination.append('<li class="page-item ' + (pageNum === pages ? 'disabled' : '') + '">' +
        '<a class="page-link" href="javascript:goPage(' + (pageNum + 1) + ')">下一页</a></li>');
}

// 跳转到指定页
function goPage(page) {
    // 边界校验
    if (page < 1) return;
    var totalPages = parseInt($("#pagination .page-item:last-child").prev().text()) || 1;
    if (page > totalPages) return;

    currentPage = page;
    loadUserList();
}

// 显示加载中提示
function showLoading() {
    $("#userTableBody").html('<tr><td colspan="7" class="text-center">加载中...</td></tr>');
}

// 隐藏加载中提示
function hideLoading() {
    // 加载完成后无需额外操作，表格会被新数据覆盖
}